home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-04 / bipl.zip / PROCS.ZIP / TBLSET.ICN < prev    next >
Text File  |  1992-09-28  |  2KB  |  69 lines

  1. ############################################################################
  2. #
  3. #    File:     tblset.icn
  4. #
  5. #    Subject:  Procedures for set-theoretic table manipulation
  6. #
  7. #    Author:   Alan Beale
  8. #
  9. #    Date:     March 31, 1990
  10. #
  11. ###########################################################################
  12. #
  13. #     These procedures are defined:
  14. #
  15. #     pairset(t)    Convert the table t to an equivalent set of ordered pairs
  16. #
  17. #     domain(t)     Return the domain of the function defined by the table t
  18. #
  19. #     range(t)      Return the range of the function defined by the table t
  20. #
  21. #     inverse(t)    Return the functional inverse of the function defined
  22. #                   by the table t
  23. #
  24. #     inverse(t,[]) Return the relational inverse of the function defined
  25. #                   by the table t.
  26. #
  27. #     inverse(t, set([])) The same as the previous, except that each
  28. #                   table member is a set rather than a list.
  29. #
  30. ############################################################################
  31.  
  32. procedure pairset(Table)
  33.     return set(sort(Table))
  34. end
  35.  
  36. procedure domain(Table)
  37.     local dom
  38.  
  39.     dom := set([])
  40.     every insert(dom, key(Table))
  41.     return dom
  42. end
  43.  
  44. procedure range(Table)
  45.     local ran
  46.  
  47.     ran := set([])
  48.     every insert(ran, !Table)
  49.     return ran
  50. end
  51.  
  52. procedure inverse(Table, Default)
  53.     local inv, delem, relem
  54.  
  55.     inv := table(Default)
  56.     every delem := key(Table) do {
  57.         if type(Default) == "list" then
  58.           if member(inv, relem := Table[delem]) then
  59.             put(inv[relem], delem)
  60.           else inv[relem] := [delem]
  61.         else if type(Default) == "set" then
  62.           if member(inv, relem := Table[delem]) then
  63.             insert(inv[relem], delem)
  64.           else inv[relem] := set([delem])
  65.         else inv[Table[delem]] := delem
  66.     }
  67.     return inv
  68. end
  69.